#include <iostream>
#include <cmath>
#include <cstring>
#include <algorithm>
#include <vector>
#include <iomanip>
#include <unordered_map>
#include <unordered_set>
#include <map>
#include <set>
#include <queue>
#include <deque>
#include <stack>
#include <cstdio>
#include <climits>
#include <bitset>
#include <numeric>

using namespace std;
using ui = unsigned int;
using ll = long long;
using ull = unsigned long long;
using pii = pair<int, int>;
static constexpr int MAX =  5050;


int main()
{
    ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
    int n, k; cin >> n >> k;
    vector<int> vec(n);
    for (int i = 0; i < n; i++) cin >> vec[i];
    sort(vec.begin(), vec.end());
    int left = 0, right = n - 1;
    // int left = 0, right = 0;
    // vector<int> win_max(n);
    // while (right++ < n)
    // {
        //     while (vec[right] - vec[left] > k) left++;
        //     win_max[right] = right - left + 1;
        // }
        // vector<int> prefix(n, 0);
        // prefix[0] = win_max[0];
        // for (int i = 1; i < n; i++)
        //     prefix[i] = max(prefix[i - 1], win_max[i]);
        // int target = 0;
    // for (int i = 1; i < n; i++)
    // {
    //     int cur = win_max[i];
    //     int pre = (i - cur >= 0) ? prefix[i - cur] : 0;
    //     target = max(target, cur + pre);
    // }
    // cout << target;

    // 正序+倒序
    vector<int> vecl(n + 1), vecr(n + 1);

    for (int i = 0; i < n; i++)
    {
        while (vec[i] - vec[left] > k && left <= i) left++;
        vecl[i] = max(vecl[i - 1], i - left + 1);
    }
    for (int i = n - 1; i >= 0; i--)
    {
        while (vec[right] - vec[i] > k && right >= i) right--;
        vecr[i] = max(vecr[i + 1], right - i + 1);
    }
    int max_val = 0;
    for (int i = 0; i < n - 1; i++)
    {
        max_val = max(max_val, vecl[i] + vecr[i + 1]);
    }
    cout << max_val;

    return 0;
}














